# a = [66.25, 333, 333, 1, 1234.5]
# print(a.count(333), a.count(66.25), a.count('x'))
# a.insert(2, -1)  # 第一个数字是索引，第二个数字是要插入的数
# print(a)
# a.append(333) # 直接把一个元素插入到末尾
# print(a)
# print(a.index(333))
# a.remove(333)
# print(a)
# a.reverse()
# print(a)
# a.sort()
# print(a)
# 将列表当作堆栈来使用
stack = [1, 2, 3]
stack.append(4)
stack.append(5)
print(stack)
stack.pop() # 去除列表最后一个元素
print(stack)
stack.pop()
print(stack)
# 把列表当成队列来使用
from _collections import  deque
queue = deque(["Eric", "John", "Mike"])
queue.append("张三")
queue.append("李四")
print(queue)
queue.popleft()
print(queue)
queue.popleft()
print(queue)

# 列表推导式，这里我们将列表中每个数值乘三，获得一个新的列表
vec = [2, 4, 6]
vec = [3*x for x in vec]
print(vec)
# 再次变化
vec = [[x, x**2] for x in vec]
print(vec)
# 添加if判断
a = [1, 2, 3]
a = [3*x for x in a if x >= 2] # x的值为未变化前a列表的值
print(a)
# 两个列表之间进行计算,包括相加，相乘，以及对应数进行相乘
vec1 = [2, 4, 6]
vec2 = [4, -3, 9]
vec = [x * y for x in vec1 for y in vec2 ]
print(vec)
vec = [x + y for x in vec1 for y in vec2]
print(vec)
vec = [vec1[i] * vec2[i] for i in range(len(vec1))]
print(vec)
# 嵌套列表解析
# 1将3*4矩阵转换成4*3矩阵
matrix=[
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12],
]
vex =[[row[i] for row in matrix] for i in range(4)]
print(vex)
# del语句
a = [-1, 1, 66.25, 333, 333, 1234.5]
del a[0]
del a[1:3]
print(a)
del a[:]
print(a)
# 元组与序列
t = 12345, 54321, 'hello'
print(t[0])
print(t)
u = t, (1, 2, 3, 4, 5) # 元组可以加括号也可以不加
print(u) # 输出的元组一定是有括号的】
# 集合
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket) # 删除重复的
print('apple' in basket) # 检测元素是否在集合内
a = set("qwertyuiopasdfghjkl")
b = set("qawsedcfvbgtyhn")
print(a-b)     # 在 a 中的字母，但不在 b 中
print(a&b) # 在 a 和 b 中都有的字母
print(a^b)   # 在 a 或 b 中的字母，但不同时在 a 和 b 中
print(a|b)       # 在 a 或 b 中的字母
# 集合也支持推导式
a = {x for x in 'asdsaddqweqwf' if x not in 'abc'}
print(a)
# 字典
tel = {'jack': 1995, 'mary': 1998, 'Tom': 1932}
print(tel)
print(tel['jack'])
del tel['mary']
print(tel)
tel['Tom'] = 1234
print(tel)
print(list(tel.keys()))
print(sorted(tel.keys()))
print('Tom' in tel) # 判断键是否在字典中
# 构造函数 dict() 直接从键值对元组列表中构建字典。
# 如果有固定的模式，列表推导式指定特定的键值对：
a = dict([('s', 123), ('a', 456), ('d', 789)])
print(a)
# 此外，字典推导可以用来创建任意键和值的表达式词典：
a = {x: x**2 for x in [2, 4, 6]}
print(a)
# 如果关键字只是简单的字符串，使用关键字参数指定键值对有时候更方便：
a = dict(space=123, asd='wqs')
print(a)
# 遍历技巧
knights = {'gallahad': 'the pure', 'robin': 'the brave'}
for k,v in knights.items():
    print(k,v)
# 同时遍历两个或更多的序列，可以使用 zip() 组合：
questions = ['name', 'quest', 'favorite color']
answers = ['lancelot', 'the holy grail', 'blue']
for q, a in zip(questions, answers):
    print('what is your {0}? It is {1}'.format(q, a))
# 要反向遍历一个序列，首先指定这个序列，然后调用 reversed() 函数：
for i in reversed(range(1, 10, 2)):
    print(i)
    # 要按顺序遍历一个序列，使用 sorted()
    # 函数返回一个已排序的序列，并不修改原值：
basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
for i in sorted(set(basket)):
    print(i)